package com.code.lightning.code.mysql;

import lombok.*;

import java.util.Date;

/**
 * MYSQL对应类型枚举类
 * @author LGX_TvT
 * @date 2020-09-17 23:23
 *
 * mysql    Java
 *
 * - VARCHAR	    String.class
 * - CHAR	        String.class
 * - TEXT	        String.class
 * - MEDIUMTEXT	    String.class
 * - LONGTEXT	    String.class
 * - TINYTEXT	    String.class
 * - BIT	        Boolean.class
 * - INT	        int.class
 * - BIGINT	        long.class
 * - DOUBLE	        double.class
 * - TINYINT	    int.class
 * - FLOAT	        float.class
 * - DECIMAL	    BigDecimal.class
 * - INT	        int.class
 * - BIGINT	        int.class
 * - DECIMAL	    BigDecimal.class
 * - DATETIME	    Date.class
 * - TIME	        Date.class
 * - DATE	        Date.class
 * - TIMESTAMP	    Date.class
 */
@NoArgsConstructor
@AllArgsConstructor
@Getter
public enum MySqlConvertEnum {

    /**
     * VARCHAR类型
     */
    VARCHAR("VARCHAR", "String", String.class, String.class.getTypeName()),

    /**
     * CHAR类型
     */
    CHAR("CHAR", "String", String.class, String.class.getTypeName()),

    /**
     * TEXT类型
     */
    TEXT("TEXT", "String", String.class, String.class.getTypeName()),

    /**
     * MEDIUMTEXT类型
     */
    MEDIUMTEXT("MEDIUMTEXT", "String", String.class, String.class.getTypeName()),

    /**
     * LONGTEXT类型
     */
    LONGTEXT("LONGTEXT", "String", String.class, String.class.getTypeName()),

    /**
     * TINYTEXT 类型
     */
    TINYTEXT("TINYTEXT", "String", String.class, String.class.getTypeName()),

    /**
     * BIT 类型
     */
    BIT("BIT", "Boolean", Boolean.class, Boolean.class.getTypeName()),

    /**
     * INT 类型
     */
    INT("INT", "Integer", Integer.class, Integer.class.getTypeName()),

    /**
     * BIGINT 类型
     */
    BIGINT("BIGINT", "Long", Long.class, Long.class.getTypeName()),

    /**
     * DOUBLE 类型
     */
    DOUBLE("DOUBLE", "Double", Double.class, Double.class.getTypeName()),

    /**
     * DECIMAL 类型
     */
    DECIMAL("DECIMAL", "Double", Double.class, Double.class.getTypeName()),

    /**
     * DATETIME 类型
     */
    DATETIME("DATETIME", "Date", Date.class, Date.class.getTypeName()),

    /**
     * TIME 类型
     */
    TIME("TIME", "Date", Date.class, Date.class.getTypeName()),

    /**
     * DATE 类型
     */
    DATE("DATE", "Date", Date.class, Date.class.getTypeName()),

    /**
     * TIMESTAMP 类型
     */
    TIMESTAMP("TIMESTAMP", "Date", Date.class, Date.class.getTypeName()),

    /**
     * TINYINT 类型
     */
    TINYINT("TINYINT", "Integer", Integer.class, Integer.class.getTypeName()),

    /**
     * FLOAT 类型
     */
    FLOAT("FLOAT", "Float", Float.class, Float.class.getTypeName()),

    /**
     * SET 类型
     */
    SET("SET", "String", String.class, String.class.getTypeName()),

    /**
     * BLOB 类型
     */
    BLOB("BLOB", "Byte[]", Byte[].class, Byte[].class.getTypeName()),

    /**
     * LONGBLOB 类型
     */
    LONGBLOB("LONGBLOB", "Byte[]", Byte[].class, Byte[].class.getTypeName()),

    /**
     * SMALLINT 类型
     */
    SMALLINT("SMALLINT", "Integer", Integer.class, Integer.class.getTypeName()),

    /**
     * FLOAT 类型
     */
    ENUM("ENUM", "String", String.class, String.class.getTypeName());

    /**
     * MYSQL数据类型
     */
    private String mysqlType;

    /**
     * Java数据类型
     */
    private String javaType;

    /**
     * Java数据类型class
     */
    private Class javaTypeClass;

    /**
     * Java 数据类型class全类名
     */
    private String javaTypeClassName;


    /**
     * 数据数据库类型名称获取相应枚举类
     * @param mysqlType
     * @return
     */
    public static MySqlConvertEnum getEnumByMySqlType(String mysqlType) {
        for (MySqlConvertEnum value : MySqlConvertEnum.values()) {
            if(value.getMysqlType().equals(mysqlType) || mysqlType.matches(value.getMysqlType() + "\\s*(\\S+)\\s*")) {
                return value;
            }
        }
        return null;
    }



}
